import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import path from "path";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";

export default defineConfig({
  optimizeDeps: {
    force: true,
  },
  plugins: [
    vue(),
    AutoImport({
      imports: ["vue", "vue-router"], // 自动引入的三方库
      resolvers: [ElementPlusResolver()],
      injectAtEnd: false,
      eslintrc: {
        // 项目中使用了 eslint，那么虽然可以正常使用 API 了，但是 eslint 还是会报没有引入的报错。下面的配置可以处理这种情况
        enabled: true, // 会在根目录下自动生成 .eslintrc-auto-import.json 文件
        filepath: "./.eslintrc-auto-import.json",
        globalsPropValue: true
      }
    }),
    Components({
      // 默认会自动导入components下的组件
      // 自动导入的插件，解析器可以是 vant element and-vue
      resolvers: [ElementPlusResolver()]
    }),
    createSvgIconsPlugin({
      iconDirs: [path.resolve(process.cwd(), "src/assets/icons")],
      symbolId: "icon-[dir]-[name]"
    })
  ],
  ssr: true, // 服务端渲染
  base: "/", // 在生产中服务时的基本公共路径
  outDir: "dist", // 构建输出将放在其中。如果目录存在，它将在构建之前被删除
  resolve: {
    extensions: [".js", ".jsx", ".ejs", ".mjs"], // 之前忽略了 .mjs
    alias: {
      "@": path.resolve(__dirname, "src"),
      "@components": path.resolve(__dirname, "src/components"),
      "@views": path.resolve(__dirname, "src/views"),
      "@assets": path.resolve(__dirname, "src/assets")
    }
  },
  // 反向代理
  server: {
    host: "localhost", // 指定服务器主机名
    port: 9999, // 指定服务器端口
    base: "./",
    hmr: true, // 开启热更新
    open: true, // 在服务器启动时自动在浏览器中打开应用程序
    strictPort: false, // 设为 false 时，若端口已被占用则会尝试下一个可用端口,而不是直接退出
    https: false, // 是否开启 https
    cors: true, // 为开发服务器配置 CORS。默认启用并允许任何源
    proxy: {
      "/api": {
        target: "http://192.168.1.25:9080", //测试
        // target: "http://139.196.81.81:9080", //测试
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, "")
      }
    }
  },
  //sass
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: '@import "@/assets/style/element-variables.scss";'
      }
    }
  },
  // 打包配置
  build: {
    minify: "terser",
    terserOptions: {
      compress: {
        drop_console: false,
        drop_debugger: true
      }
    }
  }
});
